/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.clinicariobamba.ReglasNegocio.Funciones;

import com.clinicariobamba.Accesodatos.Conexion;
import com.clinicariobamba.ReglasNegocio.Clases.Dependencia;
import com.clinicariobamba.ReglasNegocio.Clases.Organizacion;
import com.clinicariobamba.ReglasNegocio.Clases.OrganizacionDependencia;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 *
 * @author Gis
 */
public class FuncionesOrganizacionDependencia {

    public static OrganizacionDependencia obtenerOrganizacionDependenciaId(int id) {
        try {
            Conexion con = new Conexion();
            OrganizacionDependencia list = new OrganizacionDependencia();

            try {
                String sql = String.format("SELECT od.id_org_dep, "
                        + "o.id_organizacion,o.nombre,o.direccion,o.telefono ,"
                        + " d.id_dependencia, d.descripcion FROM `organizacion_dependencia` as od "
                        + "inner join `organizacion` as o on  od.id_organizacion = o.id_organizacion "
                        + "inner join `dependencia` as d on od.id_dependencia = d.id_dependencia"
                        + "where od.id_org_dep = %d", id);
                ResultSet rs = con.ejecutarQuery(sql);

                while (rs.next()) {
                    list = new OrganizacionDependencia(rs.getInt(1), new Dependencia(rs.getInt(6), rs.getString(7)), new Organizacion(rs.getInt(2), rs.getString(3), rs.getString(4), rs.getString(5)));
                }

            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Relacion Organización Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return list;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new OrganizacionDependencia();
        }

    }

    public static ArrayList<OrganizacionDependencia> obtenerOrganizacionDependencia() {
        try {
            Conexion con = new Conexion();
            ArrayList<OrganizacionDependencia> list = new ArrayList<OrganizacionDependencia>();

            try {
                String sql = String.format("SELECT od.id_org_dep, "
                        + "o.id_organizacion,o.nombre,o.direccion,o.telefono ,"
                        + " d.id_dependencia, d.descripcion FROM `organizacion_dependencia` as od "
                        + "inner join `organizacion` as o on  od.id_organizacion = o.id_organizacion "
                        + "inner join `dependencia` as d on od.id_dependencia = d.id_dependencia"
                );
                ResultSet rs = con.ejecutarQuery(sql);

                while (rs.next()) {
                    list.add(new OrganizacionDependencia(rs.getInt(1), new Dependencia(rs.getInt(6), rs.getString(7)), new Organizacion(rs.getInt(2), rs.getString(3), rs.getString(4), rs.getString(5))));
                }

            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Relacion Organización Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return list;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new ArrayList<OrganizacionDependencia>();
        }

    }

    public static boolean insertar(OrganizacionDependencia orgDependencia) throws Exception {
        boolean resultado;
        resultado = false;
        try {
            String sql = String.format("SELECT `clinica riobamba`.`insertar_organizacion_dependencia`(%d, %d)", orgDependencia.getOrganizacion().getIdOrganizacion(), orgDependencia.getDependencia().getIdDependencia());
            Conexion c = new Conexion();
            ResultSet rs = c.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            c.desconectar();
        } catch (Exception ex) {
            throw ex;

        }
        return resultado;

    }

    public static boolean modificar(OrganizacionDependencia orgDependencia) throws Exception {
        boolean resultado;
        resultado = false;
        try {
            String sql = String.format("SELECT `clinica riobamba`.`actualizar_organizacion_dependencia`(%d , %d, %d)", orgDependencia.getIdOrgDep(), orgDependencia.getOrganizacion().getIdOrganizacion(), orgDependencia.getDependencia().getIdDependencia());
            Conexion c = new Conexion();
            ResultSet rs = c.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            c.desconectar();
        } catch (Exception ex) {
            throw ex;

        }
        return resultado;

    }

    public static boolean eliminar(OrganizacionDependencia orgDependencia) throws Exception {
        boolean resultado;
        resultado = false;
        try {
            String sql = String.format("SELECT `clinica riobamba`.`eliminar_organizacion_dependencia`(%d)", orgDependencia.getIdOrgDep());
            Conexion c = new Conexion();
            ResultSet rs = c.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            c.desconectar();
        } catch (Exception ex) {
            throw ex;

        }
        return resultado;

    }

    public static OrganizacionDependencia obtenerOrganizacionDependenciaOD(int idOrganizacion, int idDependencia) {
        try {
            Conexion con = new Conexion();
            OrganizacionDependencia orgDep = new OrganizacionDependencia();
            try {
                String sql = String.format("select * from organizacion_dependencia as od where od.id_dependencia = %d  and od.id_organizacion = %d ", idDependencia, idOrganizacion);
                ResultSet rs = con.ejecutarQuery(sql);
                while (rs.next()) {
                    orgDep = new OrganizacionDependencia(rs.getInt(1), new Dependencia(rs.getInt(2)), new Organizacion(rs.getInt(3)));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return orgDep;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new OrganizacionDependencia();
        }
    }

    public static Integer obtenerSoloIDOrgDep(int idOrganizacion, int idDependencia) {
        try {
            Conexion con = new Conexion();
            Integer idOD = null;
            try {
                String sql = String.format("select od.id_org_dep from organizacion_dependencia as od where od.id_dependencia = %d  and od.id_organizacion = %d ", idDependencia, idOrganizacion);
                ResultSet rs = con.ejecutarQuery(sql);
                while (rs.next()) {
                    idOD = rs.getInt(1);
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return idOD;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return null;
        }
    }

}
